7.1.1 R包地图底图
## 获取shp地图:
newmap <- getMap(resolution = "coarse")
plot(newmap)
data(coastsCoarse)
data(countriesLow)
## 直接绘图,然后添加shp边界:
hh = read.csv("./dhfuh.csv")
plot(hh)
maps::maps(add= T)
## 添加box获取地图边界:
data(wrld_simpl)
# Plot the base map
plot(wrld_simpl,
xlim = c(min.lon, max.lon),
ylim = c(min.lat, max.lat),
axes = TRUE,
col = "grey95")、
box()
7.12 leaflet
library(wallace)
leaflet()%>%setView(lng=116.38,lat=39.9,zoom=3)%>%
addTiles()%>%addProviderTiles("Esri.WorldImagery")
## 查看范围:
data(wrld_simpl)
## 使用mao(add =T)进行快速可视化:
all <- read.csv("D:/xh2/f1_points/xhas.csv")
plot(all$longitude,all$latitude)
map(add=T)
## ggplot代码的快速并列可视化:
grid.arrange(plot1, plot2, ncol = 2)
```{r, fig.width=8}
plot1 = ggplot(combined_dat, aes(y = ..density..)) + geom_histogram(aes(x = Sepal.Width, fill = Type), bins = 20) +
facet_wrap(~Type) +
ggtitle("Distribution of Sepal Width", "Biased resample vs Original sample")
plot2 = ggplot(combined_dat, aes(y = ..density..)) + geom_histogram(aes(x = Sepal.Length, fill = Type), bins = 20) +
facet_wrap(~Type) +
ggtitle("Distribution of Sepal Length", "Biased resample vs Original sample")
grid.arrange(plot1, plot2, ncol = 2)
案例:
加载R包:
library(raster) library(dismo) library(tidyverse) library(SDMtune) library(rgdal)
设置相对路径:
setwd("E:/sjdata/")
加载物种分布数据:
待比较中四个种间数据:
加载西藏沙棘:
hthi <- read.csv("./F1_SP/Hthi3.csv")
加载江孜沙棘:
hgya <- read.csv("./F1_SP/Hgya3.csv")
加载柳叶沙棘:
hsal <- read.csv("F1_SP/Hsal3.csv")
加载肋果沙棘:
hsneu <- read.csv("./F1_SP/Hsneu3.csv") hsste <- read.csv("./F1_SP/Hsste3.csv") hse <- rbind(hsneu,hsste ) hse2 <- rep("Hse",dim(hse)[1]) hse <- cbind(hse2,hse[,2:3]) names(hse)[1] <- "name"
汇总分布数据:
alls <- rbind(hthi,hgya,hsal,hse) summary(all) head(hthi) head(hgya) head(hse)
加载鼠李沙棘的物种分布数据:
中亚沙棘 stur
中国沙棘 ssin
高加索沙棘 scau
云南沙棘 syun
蒙古沙棘 smon
卧龙沙棘 swol
海滨沙棘 srha
克尔巴阡山沙棘 scar
溪生沙棘 sflu
stur <- read.csv("./F1_SP/stur3.csv") ssin <- read.csv("./F1_SP/ssin3.csv") scau <- read.csv("./F1_SP/scau3.csv") syun <- read.csv("./F1_SP/syun3.csv") smon <- read.csv("./F1_SP/smon3.csv") srha <- read.csv("./F1_SP/srha3.csv") scar <- read.csv("./F1_SP/scar3.csv") sflu <- read.csv("./F1_SP/sflu5.csv")
all <- rbind(hthi,hgya,hse) summary(all)
long :Min: 77.27 Max:103.46
lat :min:27.72 max:39.91
构建5度buffer:
frange <- function(x){ occs <- x xmin <- min(occs$longitude) xmax <- max(occs$longitude) ymin <- min(occs$latitude) ymax <- max(occs$latitude) bb <- matrix(c(xmin-4, xmin-4, xmax+4, xmax+4, xmin-4, ymin-3, ymax+4, ymax+4, ymin-3, ymin-3), ncol=2) bgExt <- sp::SpatialPolygons(list(sp::Polygons(list(sp::Polygon(bb)), 1))) return(bgExt) }
rang <- frange(all) rang
导出数据分布范围:
df <- data.frame(ID=character(), stringsAsFactors=FALSE ) for (i in rang@polygons ) { df <- rbind(df, data.frame(ID=i@ID, stringsAsFactors=FALSE)) } row.names(df) <- df$ID rang <- SpatialPolygonsDataFrame(rang, df)
可视化种间分布点,使用leaflet:
加载属:
all3 <- rbind(hthi,hgya,hsal,hse) %>% data.frame(.) head(all3) attach(all3) library(leaflet)
iconList = awesomeIconList( "Hthi" = makeAwesomeIcon(icon ='ios-close',markerColor = "blue"), "Hgya" = makeAwesomeIcon(icon ='ios-close',markerColor = "green"), "Hsal" = makeAwesomeIcon(icon ='ios-close',markerColor = "red"), "Hse" = makeAwesomeIcon(icon ='ios-close',markerColor = "black")) pal <- colorNumeric( palette = "YlGnBu", domain = countries$gdp_md_est )
all3$name <- factor(all3$name)
yyIcons <- iconList( 中国医科院所属医院 = makeIcon(“https://img-blog.csdn.net/20161015181859390”, iconWidth =32, iconHeight = 32), 北京区县属医院 = makeIcon(“https://img-blog.csdn.net/20161015182217958”, iconWidth =32, iconHeight = 32),
leaflet(bj3H) %>%addProviderTiles(“CartoDB.Positron”) %>% addMarkers(icon = ~yyIcons[fl],popup=~fl)
iconList = iconList( Hthi = makeIcon(icon ='ios-close',markerColor = "blue"), Hgya = makeIcon(icon ='ios-close',markerColor = "green"), Hsal = makeIcon(icon ='ios-close',markerColor = "red"), Hse = makeIcon(icon ='ios-close',markerColor = "black"))
有待改进的地方:
参考url:https://www.giserdqy.com/secdev/leaflet/25986/
https://www.baidu.com/s?ie=UTF-8&wd=R%E8%AF%AD%E8%A8%80%E5%9C%A8%E7%BA%BF%E5%9C%B0%E5%9B%BE%E7%A5%9E%E5%99%A8%EF%BC%9ALeaflet%20for%20R%E5%8C%85
添加图例:
p = colorFactor(palette = c("white","green","blue"),domain = c("Office","college","home"),ordered = T) my_adds <- leaflet() %>% addTiles() %>% addCircleMarkers(lng=75.6944, lat=11.9811,popup = "My Office",color = "white") %>% addCircleMarkers(lng=77.7141, lat=12.9675,popup = "My college",color = "green") %>% addCircleMarkers(lng=77.669907, lat=13.0118285,popup = "My Home") %>% addLegend(position = "topright",pal = p, values = c("office","home","college"),title = "Address") my_adds
国界分布简图:Esri.WorldStreetMap
leaflet(data = all3[,-1]) %>% addTiles() %>% addMarkers(~longitude, ~latitude)%>% addAwesomeMarkers(lng=~longitude,lat=~latitude,icon = ~iconList[name], label= ~as.character(name)) %>% addProviderTiles("Esri.WorldStreetMap")
换卫星图:
leaflet(data = all3[,-1]) %>% addTiles() %>% addMarkers(~longitude, ~latitude)%>% addAwesomeMarkers(lng=~longitude,lat=~latitude,icon = ~iconList[name], label= ~as.character(name)) %>% addProviderTiles("Stamen.Terrain") %>% addPolygons(data =rang,fill = F)
pal <- colorFactor(c("blue","green","red","black"), all3, levels = NULL, ordered = FALSE, na.color = "#808080", alpha = FALSE, reverse = FALSE)
加载一个研究范围:
pal <- colorNumeric( palette = "YlGnBu", domain = countries$gdp_md_est ) map %>% addPolygons(stroke = FALSE, smoothFactor = 0.2, fillOpacity = 1, color = ~pal(gdp_md_est) ) %>% addLegend("bottomright", pal = pal, values = ~gdp_md_est, title = "Est. GDP (2010)", labFormat = labelFormat(prefix = "$"), opacity = 1 )
各种地图底图
# OpenStreetMap.Mapnik
OpenStreetMap.BlackAndWhite
OpenStreetMap.DE
OpenStreetMap.France
OpenStreetMap.HOT
OpenTopoMap
Thunderforest.OpenCycleMap
Thunderforest.Transport
Thunderforest.TransportDark
Thunderforest.SpinalMap
Thunderforest.Landscape
Thunderforest.Outdoors
Thunderforest.Pioneer
OpenMapSurfer.Roads
OpenMapSurfer.Grayscale
Hydda.Full
Stamen.Toner
Stamen.TonerBackground
Stamen.TonerLite
Stamen.Watercolor
Stamen.Terrain
Stamen.TerrainBackground
Stamen.TopOSMRelief
Esri.WorldStreetMap
Esri.DeLorme
Esri.WorldTopoMap
Esri.WorldImagery
Esri.WorldTerrain
Esri.WorldShadedRelief
Esri.WorldPhysical
Esri.OceanBasemap
Esri.NatGeoWorldMap
Esri.WorldGrayCanvas
MtbMap
CartoDB.Positron
CartoDB.PositronNoLabels
CartoDB.PositronOnlyLabels
CartoDB.DarkMatter
CartoDB.DarkMatterNoLabels
CartoDB.DarkMatterOnlyLabels
HikeBike.HikeBike
HikeBike.HillShading
NASAGIBS.ModisTerraTrueColorCR
NASAGIBS.ModisTerraBands367CR
NASAGIBS.ViirsEarthAtNight2012
NASAGIBS.ModisTerraLSTDay
NASAGIBS.ModisTerraSnowCover
NASAGIBS.ModisTerraAOD
NASAGIBS.ModisTerraChlorophyll
### 优秀的leaflet案例
```r
### 在浏览器中打开:
## 这种leaflet的使用方法值得学习:
m <- leaflet()
m <- addTiles(m)
m <- addProviderTiles(m, "Esri.OceanBasemap")
cols <- c("red", "navy")
m <- addCircleMarkers(m,
lng = hurricanes$FirstLon,
lat = hurricanes$FirstLat,
radius = 2.5,
color = cols[hurricanes$Type+1],
popup = paste('Year:', as.character(hurricanes$Year)))
m <- addLegend(m,
"topright",
colors = cols,
labels = c('tropical', 'non-tropical'),
title = "Type of Hurricane",
opacity = 1)
m
#
7.1.3 卫星地图可视化:
## 卫星地图可视化:
e = extent(chuck.sp)
buf = .5
chuck.df<- as.data.frame(chuck.sp)
library(ggmap)
myMap <- get_stamenmap(bbox = c(left = e[1]-buf,
bottom = e[3] -buf,
right = e[2]+buf,
top = e[4] +buf),
maptype = "terrain",
crop = FALSE,
zoom = 6)
# plot map
ggmap(myMap) + geom_point(aes(x = lon, y = lat), data = chuck.df, alpha = .5)
## 谷歌地图可视化:
library(RgoogleMaps)
lat <- c(48,64) #define our map's ylim
lon <- c(-140,-110) #define our map's xlim
center = c(mean(lat), mean(lon)) #tell what point to center on
zoom <- 5 #zoom: 1 = furthest out (entire globe), larger numbers = closer in
terrmap <- GetMap(center=center, zoom=zoom, maptype= "terrain", destfile = "terrain.png") #lots of visual options, just like google maps: maptype = c("roadmap", "mobile", "satellite", "terrain", "hybrid", "mapmaker-roadmap", "mapmaker-hybrid")
7.1.4 卫星地图可视化:
## 使用mapview进行可视化
###### f2:分布图可视化:####
t1 <- occ[,2:3] %>% data.frame()
library(mapview)
# install.packages("mapview")
library(sp)
coordinates(t1 ) <- ~long+lat
proj4string(t1) <- CRS("+init=epsg:4326")
# plot data
mapView(t1)